オイラーの定理とカーマイケルの定理

水 25 7月 2018

以前の記事, エルガマル暗号では, エルガマル暗号に関する諸々の前提の説明と, その実装について示した. 同エントリ内で, フェルマーの小定理1については取り扱ったものの, その一般形であるオイラーの定理およびカーマイケルの定理について特に触れなかったため, 本エントリでそれらに関してまとめる. しばしば値の確認には, 簡単のため Haskell を使う.

オイラーの定理

いま, フェルマーテストを定義したとき, FTn(a) をパスするには(すなわち, フェルマーの小定理が示す合同式が成り立つには), 要件として, 既約剰余類郡 Zn の各要素と a Z の積が全て異なり, modn の既約代表系のすべての積と合同でなければならない. たとえば, 法 n=8 による合同関係で構成する剰余類の完全代表系20,1,2,3,4,5,6,7 であるが, a=2 としてしまうと, 既約剰余類郡が構成できていないので, 次のようにしても完全代表系が得られない(積をわざわざ示していないが, 非合同でないことは, 各要素の積が全て異なっていない時点で明白である).

Prelude> [x * 2 `rem` 8 | x <- [0..7]]
[0,2,4,6,0,2,4,6]

そこで, 先に述べた剰余類の既約代表系を考える. これは ϕ(8)=43で, 1,3,5,7 である. これを同じように, {1a, 3a, 5a, 7a} とし, 先の要件を確認すると, この補題2より, mod8 で全体として {1,3,5,7} と一致していて, 13571357a4(mod8)

gcd(1357,8)=1 だから, 1357 を約して, a41(mod8)
これは, gcd(a,n)=1 ということの他に, a および n の値に依存した論ではない. すなわち,

aϕ(n)1(modn) (2nZ+, gcd(a,n)=1)

がいえる4.

*Main> euler'sTheorem n = [a `modExp` (totient n) $ n | a <- [2..], gcd a n == 1]
*Main> all (==1) $ take 100 $ euler'sTheorem 8
True

n が素数 p であるとき, ϕ(p)=p1 で, フェルマーの小定理1となる5.

ラグランジュの定理

いま述べたオイラーの定理は, ラグランジュの定理を使っても証明できる. ラグランジュの定理は,

有限郡 G の部分郡 H の位数 H は, G の位数 G の約数となる. G = G:H∣∣H

である.

証明: 有限郡 G の部分郡 H による類別が G=riaiH であるとき, G∣=rH といえる. この rr=∣G:H そのものなので, G = G:H∣∣H

ごく直感的な定理である. これを使えば, オイラーの定理は次のように証明できる.

補題1: 有限郡 G とその元 gG に対し, gG=e. eG は単位元.

証明: 巡回部分郡 H=<g> の元 g の位数 H は, 巡回して gi=e となる最小の iN であるといえる. すなわち gH=e

ここで, 商集合の位数を両辺に次のように与える. (gH)G:H=(e)G:H
左辺は指数法則により, また右辺は単位元の繰り返しだから, これを次のようにかける. gH∣∣G:H=e
ラグランジュの定理より gG=e
 

オイラーの定理の証明: オイラーの定理を仮定したとき, 脚注2より剰余類 ¯a は法 n に関する既約剰余類郡 Zn に含まれる. Zn∣=ϕ(n) だから補題 1 より ¯aϕ(n)=¯aϕ(n)=¯1

カーマイケルの定理

オイラーの定理で用いる ϕ 関数は, am1(modn) (mN,gcd(a,n)=1 を成立させる最小の整数 m を持ち得ない. たとえば, n=8 では, 先の通り確かに m=ϕ(8)=4 で合同式が満足できたが, m=2 としても, これを満足できる.

*Main> all (==1) $ take 100 $ [a `modExp` 2 $ 8 | a <- [2..], gcd a 8 == 1]
True

カーマイケルの λ 関数は, 与えられた整数 n に対して同合同式を満足する最小の m を定義より自明に与える.

扱う文字を全て整数とし, λ(n)λ(1):=1λ(2):=1λ(4):=4λ(2k):=ϕ(2k) (0k2)λ(2k):=2k2=ϕ(2k)2 (e3)λ(ph):=ϕ(ph)=(p1)ph1 (p is an odd prime,h1)λ(2kph11ph22ph33phtt):=lcm(λ(2k),λ(ph11),λ(ph22),λ(ph33),,λ(phtt)) (pn is an odd prime,k0,hn1)
と定義する.
aλ(n)1(modn) (2nZ+, gcd(a,n)=1)

実装して確かめよう.

*Main> let carmichael'sLambda n = head [k | k <- [1..], and [(m `modExp` k $ n) < 2 | m <- [1..n] gcd m n < 2]]
*Main> let carmichael'sTheorem n = [a `modExp` (carmichael'sLambda n) $ n | a <- [2..], gcd a n == 1]
*Main> all (==1) $ take 100 $ carmichael'sTheorem 8
True

  1. 証明: フェルマーの小定理 

  2. 補足. 郡 G とその部分郡 H があるとき, H は郡であるから単位元 eH を含む. よって, aG の剰余類を aH={ahhH} としたとき(簡単のため, 左剰余類として式をおいたが, これに深い意味はない.), a=aeaH より aaH である. この a を剰余類 aH の代表という. また郡 G は, 異なる ai を代表とした剰余類 aiH によって類別できる(G=iaiH). この G:H 個の類別に対して, 各剰余類から代表の元を取り, 構成した集合を, GH に対する代表系という. 

  3. ここで, ϕ は, オイラーのトーシェント関数

  4. コード内のtotientmodExpは, それぞれ以前の投稿のうち, オイラーのトーシェント関数の実装部分と, カーマイケル数を得るための実装を利用. 

  5. この補足は冗長的かもしれないが, n が素数 p である場合, Zp が構成されるから, これから取った代表は素数 p と互いに素であることから, 既約代表である. この事実も, 一般に (1) から (2) へのような式変形が実行できることとの整合を示す.